package com.rocsun.base;

import lombok.Data;

import java.io.Serializable;

/**
 * @program: rocsun-scali
 * @description:
 * @author: yx.guo
 * @create: 2025-10-19 16:25
 **/
@Data
public class RocsunResult<T> implements Serializable {

    /** 状态码 */
    private Integer code;

    /** 返回消息 */
    private String message;

    /** 数据内容 */
    private T data;

    // ======================== 构造方法 ========================

    public RocsunResult() {}

    public RocsunResult(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    // ======================== 静态构建方法 ========================

    /** 成功（带数据） */
    public static <T> RocsunResult<T> success(T data) {
        return new RocsunResult<>(RocsunErrorCodeEnum.SUCCESS.getCode(),
                RocsunErrorCodeEnum.SUCCESS.getMessage(), data);
    }

    /** 成功（无数据） */
    public static <T> RocsunResult<T> success() {
        return success(null);
    }

    /** 失败（使用枚举） */
    public static <T> RocsunResult<T> fail(RocsunErrorCodeEnum errorCodeEnum) {
        return new RocsunResult<>(errorCodeEnum.getCode(), errorCodeEnum.getMessage(), null);
    }

    /** 失败（自定义消息） */
    public static <T> RocsunResult<T> fail(Integer code, String message) {
        return new RocsunResult<>(code, message, null);
    }

    /** 失败（默认通用失败） */
    public static <T> RocsunResult<T> fail(String message) {
        return new RocsunResult<>(RocsunErrorCodeEnum.FAIL.getCode(), message, null);
    }

    // ======================== 工具方法 ========================

    /** 是否成功 */
    public boolean isSuccess() {
        return RocsunErrorCodeEnum.SUCCESS.getCode().equals(this.code);
    }

    /** 是否失败 */
    public boolean isFail() {
        return !isSuccess();
    }

}
